# JWT密钥生成脚本

import os
import sys
import argparse

# 添加项目根目录到Python路径
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from app.utils.crypto_utils import CryptoUtils

def generate_jwt_secret(algorithm='random', length=32):
    """生成JWT密钥"""
    return CryptoUtils.generate_jwt_secret(algorithm, length)

def update_env_file(secret_key):
    """更新.env文件中的JWT_SECRET_KEY"""
    env_file = '.env'
    
    # 读取现有.env文件内容
    env_content = {}
    if os.path.exists(env_file):
        with open(env_file, 'r', encoding='utf-8') as f:
            for line in f:
                line = line.strip()
                if line and not line.startswith('#') and '=' in line:
                    key, value = line.split('=', 1)
                    env_content[key] = value
    
    # 更新JWT_SECRET_KEY，同时保留SECRET_KEY
    env_content['JWT_SECRET_KEY'] = secret_key
    env_content['SECRET_KEY'] = secret_key
    
    # 写回.env文件
    with open(env_file, 'w', encoding='utf-8') as f:
        for key, value in env_content.items():
            f.write(f"{key}={value}\n")
    
    print(f"已更新.env文件中的JWT_SECRET_KEY")

def main():
    parser = argparse.ArgumentParser(description='JWT密钥生成工具')
    parser.add_argument('--algorithm', choices=['random', 'hex', 'base64', 'sha256'], 
                        default='random', help='密钥生成算法')
    parser.add_argument('--length', type=int, default=32, help='密钥长度')
    parser.add_argument('--update-env', action='store_true', help='更新.env文件')
    parser.add_argument('--show-example', action='store_true', help='显示配置示例')
    
    args = parser.parse_args()
    
    print("JWT密钥生成工具")
    print("=" * 40)
    
    # 生成密钥
    secret_key = generate_jwt_secret(args.algorithm, args.length)
    
    print(f"\n生成的JWT密钥 ({args.algorithm}):")
    print(f"{secret_key}")
    print(f"密钥长度: {len(secret_key)}")
    
    # 更新.env文件
    if args.update_env:
        update_env_file(secret_key)
    
    # 显示配置示例
    if args.show_example:
        print("\n配置示例:")
        print("1. 环境变量:")
        print(f"   export SECRET_KEY=\"{secret_key}\"")
        print("\n2. .env文件:")
        print(f"   SECRET_KEY={secret_key}")
        print("\n3. 代码中:")
        print(f"   SECRET_KEY = \"{secret_key}\"")

if __name__ == '__main__':
    main()